# Cargo modulo para hacer ploteo
import pylab as p
import sys

# Cargo variables globales necesarias
from globalVar import GLOBAL_VAR, K_VS_TIME

# Constante con nombre de arcvhivo de log a ser usado para el plot.
# Sirve en caso que la funcion no es llamada por el modulo principal
# sino que se corre este modulo independientemente.
FILE_NAME = 'REGION_I/R.I2009_10_1_15_50_53.log'

# Constante de cantidad de agentes usada si se ejecuta el modulo solo
CANT_AGENTS = 40

# Defino constante de escala para hacer snapshot
ESCALA = 1

def plotear(file=FILE_NAME ):
    global GLOBAL_VAR , K_VS_TIME
    
    # Abro archivo de log con datos de posiciones, velocidades y fuerzas
    input = open (file, 'r')
    
    # Divido el path del log en directorios
    log_name  = file.split('/')
    
    # Armo path hasta carpata de REGION correspondiente
    path_region = '/'.join(log_name[:-1])
    
    # Armo path hasta carpeta de K VS TIME correspondiente
    path_k_vs_time = path_region + '/' + K_VS_TIME
    
    # Armo path hasta archivo K VS TIME correspondiente
    path_to_file_k_vs_t = path_k_vs_time + '/' + log_name[-1]

    try:
        # Abro archivo de log con valores de K VS TIME
        smile_shooter = open (path_to_file_k_vs_t, 'r')
    except:
        smile_shooter = input

    # Defino variable donde se guardaran los valores de la K del sistema
    k = []
    
    count = 0
    lineas = smile_shooter.readlines()
    print "smile_shooter.readlines() = ",len(lineas )
    # Guardo todos los valores de la K total del sistema que se registraron
    for line in lineas:
        if ';' in line:
            continue
        
        # Separo valores de tiempo y de la K total
        data = line.split(',')
        
        # Guardo la K total en la lista
        k.append(float(data[1]))
        
        # Actualizo variable de tiempo
        time = int(data[0])
        if 0 == time:
            count += 1
    
    print "time = ",time
    # Si tengo bien seteada la variable de cantidad de agentes
    if GLOBAL_VAR['CANT_AGENT'] > 0:
        
        # Recupero su valor
        cant_agent = GLOBAL_VAR['CANT_AGENT']
        
    # Si la variable global tiene valor invalido
    else:
        
        # Cargo cantidad de agentes con la que seteo la constante CANT_AGENTS
        cant_agent = CANT_AGENTS 
    cant_agent = count
    print "Cantidad de agentes ", cant_agent 
    # Defino listas para guardar valores de posicion de los agentes
    # al momento de hacer el snapshot
    snapshot_x = []
    snapshot_y = []
    
    # Defino listas para guardar valores de velocidad de los agentes
    # al momento de hacer el snapshot
    snapshot_vx = []
    snapshot_vy = []
    
    # Defino la posicion de donde comenzar a recorrer datos a plotear
    iter = (time*cant_agent)+1
    
    # Obtengo todas las lineas del archivo log de datos con pos, vel y acel
    #lineas = input.readlines()
    
    print " input.readlines() = ",len(lineas)
    
    # Me quedo con las lineas que corresponden al tiempo en que deseo hacer
    # el snapshot
    lineas = lineas[iter:iter+cant_agent]

    # Para cada linea de dato del archivo log
    for l in lineas:
        
        # Separo datos
        data = l.split(',')
        
        # Recupero valores de coordenadas X e Y
        x_0 = float(data[1])
        y_0 = float(data[2])
        
        # Elimino datos que asumo no representativos
        if  True or (y_0 > -20 and x_0  > -20):
            
            # Guardo coordenadas de la posicion del agente
            snapshot_x.append( x_0 * ESCALA )
            snapshot_y.append( y_0 * ESCALA )
            
            # Guardo datos de la velocidad por coordenadas
            snapshot_vx.append(float(data[3]))
            snapshot_vy.append(float(data[4]))
            print "(%s, %s) (%s, %s)"%(snapshot_x,snapshot_y, snapshot_vx,snapshot_vy)
    
    # Cargo labels al ploteo para las coordenadas X e Y
    p.xlabel('X Position')
    p.ylabel('Y Position')
    
    # Cargo valor de dt
    dt = GLOBAL_VAR['dt']
    # Cargo titulo de ploteo
    p.title(log_name[-1]+' Time: '+str(time*dt))
    
    # Hago el snapshot
    p.quiver(snapshot_x, snapshot_y, snapshot_vx, snapshot_vy)
    
    print "guardando en ",path_region
    # Guardo de ploteo generado
    p.savefig(path_region+'/'+log_name[-1][:-4]+".png")   
    
    # Muestro el ploteo
    p.show() 
    
# Por si corro el archivo con el comando 'python ploteo.py'
if __name__ == "__main__":
    
    # Nombre de archivo a plotear
    name = sys.argv[1]
    # Llamo a funcion para hacer ploteo
    plotear(name)

